This invention relates to the field of computer systems. More particularly, a system and methods are provided for enabling device operating parameters (e.g., speed or duplex settings) to persist across different phases of initialization of a computer system.
Many of today's computer systems pass through multiple phases during their initialization or booting process. In the first phase, a boot command is entered that directs the system to boot from a source that may be local (e.g., hard disk) or remote (e.g., network). System firmware (e.g., an Open Boot PROM (OBP)) may operate a suitable driver (e.g., an FCode driver) to initialize a device (e.g., disk controller, network interface card) capable of establishing a communication link with the source. Using the device, the firmware locates and loads a secondary boot program.
In the second phase of the boot process, the secondary boot program locates and loads the operating system kernel. The source of the secondary boot program may or may not be the same source from which the kernel is loaded. In a third phase of the boot process, the system kernel loads the operating system and makes the computer system ready for use.
Because control or operation of the computer system and/or individual components of the system may pass among multiple entities (e.g., OBP, FCode driver, operating system kernel), the system device through which a connection is established to boot the system may have to be initialized, or a communication connection through the component may have to be established, multiple times.
Furthermore, some devices need to operate, or operate most effectively, in particular modes or with particular settings. For example, a communication link controlled by a network interface card (NIC) may be configured for operation in either auto-negotiation mode or forced mode. In auto-negotiation mode, the interface may attempt to detect (e.g., via link auto-negotiation or parallel detection) the settings of its link partner (e.g., a switch, router) regarding speed, duplex (e.g., half or full), link-clock for speeds greater than 1 Gbps (e.g., master, slave), etc. If the interface cannot correctly determine the link partner's settings, the link may not be usable. In non-auto-negotiated mode (or forced mode), the interface must be configured with link capability settings that are compatible with the link partner.
Unfortunately, there currently is no mechanism for guaranteeing the persistence of a device's operating parameters (e.g., speed, duplex setting) through all three phases of the initialization of a computer system in a consistent manner. This may cause the device to become unusable, or require initialization to be restarted, if an incorrect parameter setting is applied. Or the boot process may become inefficient (e.g., slow) because of work-around solutions to the need to determine or apply an operating parameter. Conversely, if the desired settings for the device could be established just once and then used in each phase of the booting process, the process may finish faster, and with less chance for error.
Therefore, it would be advantageous to determine a device's settings once and to have those settings persist through each phase of an initialization process.